Early programmable devices were one-time configurable. For example, configuration may have been achieved by “blowing”—i.e., opening—fusible links. Alternatively, the configuration may have been stored in a programmable read-only memory. Those devices generally provided the user with the ability to configure the devices for “sum-of-products” (or “P-TERM”) logic operations. Later, such programmable logic devices incorporating erasable programmable read-only memory (EPROM) for configuration became available, allowing the devices to be reconfigured.
Still later, programmable devices incorporating static random access memory (SRAM) elements for configuration became available. These devices, which also can be reconfigured, store their configuration in a nonvolatile memory such as an EPROM, from which the configuration is loaded into the configuration elements when the device is powered up. These devices generally provide the user with the ability to configure the devices for look-up-table-type logic operations.
One characteristic of the configuration elements is leakage, which increases power consumption by the programmable device. Leakage can be reduced by using stacked pull-up or pull-down transistors in the configuration memory. However, as device feature sizes decrease, it becomes increasingly difficult to implement stacked transistors without a large device area penalty, because of difficulty in isolating the nodes between the stacked transistors.